/**
 * 
 */
package com.TTBook.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author Frank
 *
 */
public class ReflectUtil {  
	  
	private static final Logger logger = LoggerFactory.getLogger(ReflectUtil.class);
	  
	    public static void setFieldValue(Object target, String fname, Class ftype,  
	            Object fvalue) {  
	        if (target == null  
	                || fname == null  
	                || "".equals(fname)  
	                || (fvalue != null && !ftype.isAssignableFrom(fvalue.getClass()))) {  
	            return;  
	        }  
	        Class clazz = target.getClass();  
	        try {  
	            Method method = clazz.getDeclaredMethod("set"+ Character.toUpperCase(fname.charAt(0))+ fname.substring(1), ftype);  
	            if (!Modifier.isPublic(method.getModifiers())) {  
	                method.setAccessible(true);  
	            }  
	            method.invoke(target, fvalue);  
	  
	        } catch (Exception me) {  
	            if (logger.isDebugEnabled()) {  
	                logger.debug(me.toString());  
	            }  
	            try {  
	                Field field = clazz.getDeclaredField(fname);  
	                if (!Modifier.isPublic(field.getModifiers())) {  
	                    field.setAccessible(true);  
	                }  
	                field.set(target, fvalue);  
	            } catch (Exception fe) {  
	                if (logger.isDebugEnabled()) {  
	                    logger.debug(fe.toString());  
	                }  
	            }  
	        }  
	    }  
	}  

